home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga News 95
/
Amiga News 95.iso
/
dpat
/
dpat01
/
ampc
/
ampc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-21
|
5KB
|
154 lines
/* Am-Pc v1.1 -- Michel Laliberté, avril 1990 */
#include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
short conv = 0;
short lf = 0;
register char b;
register char a = 'á';
register short asc = 0;
register char c;
FILE *fp;
FILE *pf;
if (argc < 4 || argc > 6)
{
printf("\f");
printf("
Am-Pc v1.2 - avril 1990
\n\n");
printf(" Ce programme convertit les fichiers WordPerfect Amiga à accents \n");
printf(" français en fichiers WordPerfect accentués MS-DOS, et vice-versa.\n");
printf(" Pour convertir le disque, utiliser CrossDos, MessyDos ou Dos2Dos.\n\n");
printf("
USAGE:
1> ampc origine dest. xx [asc] [lf] Place dans le fichier\n");
printf(" \"dest.\" la conversion \n");
printf(" du fichier \"origine\".\n\n");
printf(" Si xx = pc, le sens de la conversion est: Amiga -> PC.\n");
printf(" Si xx = am, on prend le sens contraire: PC -> Amiga.\n\n");
printf(" Pour les fichiers ASCII autres que WordPerfect, utiliser \"asc\".\n");
printf(" Pour convertir les LF en LF + CR ou vice-versa, utiliser\"lf\".\n");
printf(" Pour des résultats plus rapides, travailler en RAM:\n");
printf(" ex.: 1> ampc ram:n_du_fichier ram:conv.1 pc\n");
printf("
CE PROGRAMME EST GRATUIT - REVENTE INTERDITE
\n");
printf(" Michel Laliberté, Montréal - tél.: (514) 274-0288\n\n");
exit(0);
}
if ((argc >4 && argc <7 ) && !strcmp(argv[4],"asc")) asc=1;
else if (argc >4 && argc <7) {
printf("USAGE: 1> ampc origine dest. xx [asc] [lf]\n");
exit(0);
}
if ((argc >4 && argc <7) && !strcmp(argv[5],"lf")) lf=1;
else if (argc == 6) {
printf("USAGE: 1> ampc origine dest. xx [asc] [lf]\n");
exit(0);
}
if (argc >=4 && !strcmp(argv[3],"pc")) conv=1;
else if (argc >=4 && !strcmp(argv[3],"am")) conv=2;
else {
printf("USAGE: 1> ampc origine dest. xx [asc] [lf]\n");
printf(" \"xx\" doit être \"am\" ou \"pc\".\n\n");
exit(0);
}
if((fp=fopen(argv[1],"r")) == NULL) {
printf(" Impossible d'ouvrir le fichier source...\n");
exit(0);
}
if((pf=fopen(argv[2],"w")) == NULL) {
printf(" Impossible d'ouvrir le fichier destination...\n");
exit(0);
}
if (conv==1) /* Amiga -> PC */
{
b=getc(fp);
while (b!=EOF) { /* Boucle de lecture-écriture */
if (a=='á' && (b>='à'|| b=='É')) switch(b) {
case 'é':
b=130;break;
case 'à':
b=133;break;
case 'è':
b=138;break;
case 'ê':
b=136;break;
case 'â':
b=131;break;
case 'ç':
b=135;break;
case 'î':
b=140;break;
case 'ô':
b=147;break;
case 'û':
b=150;break;
case 'É':
b=144;break;
case 'ù':
b=151;break;
case 'ë':
b=137;break;
case 'ï':
b=139;break;
case 'ü':
b=129;
}
if (lf && b==10) putc(13,pf); /* LF = CR + LF */
putc(b,pf); /* Ecrit un caractère */
if (!asc) a = b; /* Fichier ASCII ou WP? */
b=getc(fp); /* Va en chercher un autre */
}
fclose(fp);
fclose(pf);
}
if (conv==2) /* PC -> Amiga */
{
b=getc(fp);
while (b!=EOF) {
c=(b-64); /* Décalage de -64 pour les caract. invisibles*/
if (a == 'á' && c>='@' && c<='W') {
switch(c) {
case 'B':
b=233;break;
case 'E':
b=224;break;
case 'J':
b=232;break;
case 'H':
b=234;break;
case 'C':
b=226;break;
case 'G':
b=231;break;
case 'L':
b=238;break;
case 'S':
b=244;break;
case 'V':
b=251;break;
case 'P':
b=201;break;
case 'W':
b=249;break;
case 'I':
b=235;break;
case 'K':
b=239;break;
case 'A':
b=252;
}
}
if (!asc) a = b; /* Fichier ASCII ou WP? */
if (lf && b==13) goto suite; /* CR + LF = LF */
putc(b,pf);
suite:
b=getc(fp);
}
fclose(fp);
fclose(pf);
}
}